Unit Testing এবং Integration Testing হল সফটওয়্যার টেস্টিংয়ের দুটি গুরুত্বপূর্ণ স্তর, যা অ্যাপ্লিকেশন বা সিস্টেমের কোডের ভিন্ন ভিন্ন অংশের কার্যকারিতা পরীক্ষা করতে ব্যবহৃত হয়। যদিও উভয়ই সফটওয়্যার কোডের গুণগত মান যাচাই করতে সহায়ক, তবে তাদের উদ্দেশ্য এবং পরীক্ষার ক্ষেত্র আলাদা।
Unit Testing হল একটি প্রোগ্রামিং পরীক্ষার পদ্ধতি যেখানে কোডের একটি ছোট অংশ (একক ইউনিট) পরীক্ষা করা হয়। এই ইউনিটগুলি সাধারণত একটি মেথড, ফাংশন বা ক্লাসের একটি নির্দিষ্ট অংশ। Unit testing-এর মূল উদ্দেশ্য হল নিশ্চিত করা যে প্রতিটি ইউনিট আলাদাভাবে সঠিকভাবে কাজ করছে। এটি ডেভেলপমেন্ট প্রক্রিয়ায় বাগ চিহ্নিত করতে সাহায্য করে এবং কোডের উপর দ্রুত ধারণা লাভ করা সম্ভব করে।
ধরা যাক, একটি অ্যাডিশন ফাংশন যা দুটি সংখ্যার যোগফল নির্ণয় করে:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
এখন, xUnit ব্যবহার করে এই Add
মেথডের Unit Test করা হবে:
using Xunit;
public class CalculatorTests
{
[Fact]
public void Add_ShouldReturnCorrectSum_WhenGivenTwoNumbers()
{
// Arrange
var calculator = new Calculator();
int a = 5;
int b = 10;
// Act
var result = calculator.Add(a, b);
// Assert
Assert.Equal(15, result);
}
}
এখানে:
Integration Testing হল একটি টেস্টিং প্রক্রিয়া যেখানে একাধিক ইউনিট বা কম্পোনেন্টকে একত্রে পরীক্ষা করা হয়, যাতে তাদের মধ্যে সঠিকভাবে যোগাযোগ হচ্ছে কিনা এবং একে অপরের সাথে ঠিকভাবে কাজ করছে কিনা তা যাচাই করা যায়। Integration Testing মূলত নিশ্চিত করে যে সিস্টেমের বিভিন্ন অংশ একে অপরের সাথে সঠিকভাবে ইন্টিগ্রেট করছে এবং কোনও ত্রুটি সৃষ্টি করছে না।
ধরা যাক, আমরা একটি OrderService
ক্লাস তৈরি করেছি, যা একটি ডাটাবেস থেকে অর্ডার তথ্য নিয়ে আসে:
public class OrderService
{
private readonly IOrderRepository _orderRepository;
public OrderService(IOrderRepository orderRepository)
{
_orderRepository = orderRepository;
}
public Order GetOrderById(int id)
{
return _orderRepository.GetOrderById(id);
}
}
এখন, আমরা Integration Test লিখতে পারি যেখানে OrderService এবং IOrderRepository ইন্টিগ্রেট করা হচ্ছে:
using Xunit;
public class OrderServiceIntegrationTests
{
[Fact]
public void GetOrderById_ShouldReturnOrder_WhenOrderExists()
{
// Arrange
var orderRepository = new Mock<IOrderRepository>();
orderRepository.Setup(r => r.GetOrderById(It.IsAny<int>())).Returns(new Order { Id = 1, Name = "Sample Order" });
var orderService = new OrderService(orderRepository.Object);
// Act
var order = orderService.GetOrderById(1);
// Assert
Assert.NotNull(order);
Assert.Equal(1, order.Id);
Assert.Equal("Sample Order", order.Name);
}
}
এখানে:
OrderService
এবং IOrderRepository
এর মধ্যে সংযোগ পরীক্ষা করা হয়।বৈশিষ্ট্য | Unit Testing | Integration Testing |
---|---|---|
ফোকাস | কোডের একক ইউনিট বা ফাংশন পরীক্ষা করা হয়। | একাধিক ইউনিট বা সিস্টেমের মধ্যে ইন্টিগ্রেশন পরীক্ষা করা হয়। |
স্বাধীনতা | অন্যান্য কম্পোনেন্ট থেকে স্বাধীন। | একাধিক কম্পোনেন্টের ইন্টিগ্রেশন প্রক্রিয়া পরীক্ষা করা হয়। |
পরীক্ষা করা হয় | শুধুমাত্র একটি ফাংশন বা মেথড। | একাধিক ফাংশন বা মেথড, যেমন ডাটাবেস বা API। |
বাহ্যিক নির্ভরশীলতা | বাহ্যিক সিস্টেম বা ডেটাবেসের সাথে যোগাযোগ করা হয় না। | ডেটাবেস, API বা অন্যান্য সিস্টেমের সাথে ইন্টিগ্রেশন পরীক্ষা করা হয়। |
টেস্টের স্কেল | ছোট, একক পরীক্ষা। | বড়, সিস্টেমের একাধিক অংশ পরীক্ষা। |
Unit Testing এবং Integration Testing উভয়ই সফটওয়্যার টেস্টিংয়ের গুরুত্বপূর্ণ অংশ। Unit Testing ছোট ছোট ইউনিট পরীক্ষা করে এবং নিশ্চিত করে যে কোডের প্রতিটি অংশ সঠিকভাবে কাজ করছে। অপরদিকে, Integration Testing একাধিক ইউনিট বা সিস্টেমের মধ্যে ইন্টিগ্রেশন পরীক্ষা করে এবং নিশ্চিত করে যে তারা একত্রে সঠিকভাবে কাজ করছে। উভয় ধরনের টেস্টিং সিস্টেমের গুণগত মান নিশ্চিত করতে গুরুত্বপূর্ণ ভূমিকা পালন করে এবং সফটওয়্যার ডেভেলপমেন্টের প্রক্রিয়া সহজ করে।
Unit Testing হলো সফটওয়্যার ডেভেলপমেন্টের একটি গুরুত্বপূর্ণ অংশ, যা অ্যাপ্লিকেশনের ছোট ছোট ইউনিট বা কম্পোনেন্টের কার্যকারিতা পরীক্ষা করে। xUnit হলো একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা ASP.NET Core অ্যাপের জন্য সহজে Unit Test লিখতে সাহায্য করে। এটি দ্রুত, মডিউলার, এবং সহজবোধ্য টেস্টিং ফিচার প্রদান করে।
xUnit ব্যবহার করতে আপনার ASP.NET Core প্রজেক্টে xUnit NuGet প্যাকেজ ইনস্টল করতে হবে।
একটি আলাদা টেস্ট প্রজেক্ট তৈরি করতে নিচের কমান্ড ব্যবহার করুন:
dotnet new xunit -n MyApp.Tests
MyApp.Tests
টেস্ট প্রজেক্টের জন্য নির্ধারিত নাম।
আপনার মূল অ্যাপ্লিকেশন প্রজেক্টকে টেস্ট প্রজেক্টে রেফারেন্স হিসেবে যোগ করুন:
dotnet add reference ../MyApp/MyApp.csproj
একটি সাধারণ CalculatorService ক্লাস, যা যোগ এবং বিয়োগ ফাংশনালিটি প্রদান করে:
public class CalculatorService
{
public int Add(int a, int b) => a + b;
public int Subtract(int a, int b) => a - b;
}
MyApp.Tests
প্রজেক্টে একটি টেস্ট ক্লাস তৈরি করুন (যেমন CalculatorServiceTests.cs
) এবং টেস্ট লিখুন।
using Xunit;
public class CalculatorServiceTests
{
[Fact]
public void Add_ReturnsSumOfTwoNumbers()
{
// Arrange
var calculator = new CalculatorService();
int a = 5, b = 3;
// Act
int result = calculator.Add(a, b);
// Assert
Assert.Equal(8, result);
}
[Fact]
public void Subtract_ReturnsDifferenceOfTwoNumbers()
{
// Arrange
var calculator = new CalculatorService();
int a = 10, b = 4;
// Act
int result = calculator.Subtract(a, b);
// Assert
Assert.Equal(6, result);
}
}
ASP.NET Core অ্যাপ্লিকেশন সাধারণত Dependency Injection (DI) ব্যবহার করে। টেস্টিংয়ে DI ব্যবহারের জন্য Mocking ফ্রেমওয়ার্ক (যেমন Moq) প্রয়োজন।
IWeatherService ইন্টারফেস এবং একটি ইমপ্লিমেন্টেশন:
public interface IWeatherService
{
string GetWeather();
}
public class WeatherService : IWeatherService
{
public string GetWeather() => "Sunny";
}
[ApiController]
[Route("[controller]")]
public class WeatherController : ControllerBase
{
private readonly IWeatherService _weatherService;
public WeatherController(IWeatherService weatherService)
{
_weatherService = weatherService;
}
[HttpGet]
public string Get()
{
return _weatherService.GetWeather();
}
}
Moq ব্যবহার করে DI এর জন্য Mock করা যায়। Moq প্যাকেজ ইন্সটল করুন:
dotnet add package Moq
টেস্ট ক্লাস:
using Moq;
using Xunit;
public class WeatherControllerTests
{
[Fact]
public void Get_ReturnsWeatherFromService()
{
// Arrange
var mockWeatherService = new Mock<IWeatherService>();
mockWeatherService.Setup(service => service.GetWeather()).Returns("Cloudy");
var controller = new WeatherController(mockWeatherService.Object);
// Act
var result = controller.Get();
// Assert
Assert.Equal("Cloudy", result);
}
}
টেস্ট চালানোর জন্য নিচের কমান্ড ব্যবহার করুন:
dotnet test
Unit Test সফলভাবে রান হলে নিচের আউটপুট দেখতে পাবেন:
Passed! 2 tests.
xUnit ব্যবহার করে ASP.NET Core অ্যাপের জন্য সহজেই শক্তিশালী Unit Test তৈরি করা যায়, যা অ্যাপ্লিকেশনের মান এবং স্থায়িত্ব বাড়ায়।
Moq হলো .NET অ্যাপ্লিকেশনের জন্য একটি জনপ্রিয় Mocking Framework, যা Unit Testing এর সময় ডিপেনডেন্সি মক করার সুবিধা প্রদান করে। এটি বিশেষভাবে Dependency Injection ভিত্তিক অ্যাপ্লিকেশনের জন্য কার্যকর। Moq Framework ব্যবহার করে, আপনি ডিপেনডেন্ট অবজেক্টের মক (Mock) তৈরি করতে পারেন এবং তাদের আচরণ নিয়ন্ত্রণ করতে পারেন।
Unit Testing-এ মকিং ব্যবহারের মাধ্যমে আপনি External Dependencies (যেমন ডাটাবেস, API, বা সার্ভিস) সরিয়ে ফেলে শুধুমাত্র টেস্ট করা ক্লাসের কার্যকলাপ নিশ্চিত করতে পারেন।
Moq Framework ব্যবহার করার জন্য NuGet Package Manager বা dotnet CLI
ব্যবহার করে প্যাকেজ ইন্সটল করতে পারেন:
Visual Studio এর NuGet Package Manager থেকে Moq
ইনস্টল করুন।
dotnet add package Moq
Moq সাধারণত ইন্টারফেসের উপর কাজ করে, কারণ মক করার জন্য এটি ডিপেনডেন্সি ইনজেকশন ব্যবহার করে।
উদাহরণস্বরূপ, একটি IUserRepository
ইন্টারফেস যেখানে ডেটাবেস অপারেশন থাকে:
public interface IUserRepository
{
User GetUserById(int id);
void AddUser(User user);
}
UserService
ক্লাস, যেখানে IUserRepository
এর উপর নির্ভরশীলতা রয়েছে:
public class UserService
{
private readonly IUserRepository _userRepository;
public UserService(IUserRepository userRepository)
{
_userRepository = userRepository;
}
public string GetUserNameById(int id)
{
var user = _userRepository.GetUserById(id);
return user != null ? user.Name : "User not found";
}
}
UserService
ক্লাসের জন্য Unit Test লিখতে হবে। এখানে আমরা Moq ব্যবহার করে IUserRepository
মক করব।
using Moq;
using Xunit;
public class UserServiceTests
{
[Fact]
public void GetUserNameById_UserExists_ReturnsUserName()
{
// Arrange
var mockUserRepository = new Mock<IUserRepository>();
mockUserRepository.Setup(repo => repo.GetUserById(1))
.Returns(new User { Id = 1, Name = "John Doe" });
var userService = new UserService(mockUserRepository.Object);
// Act
var result = userService.GetUserNameById(1);
// Assert
Assert.Equal("John Doe", result);
}
[Fact]
public void GetUserNameById_UserDoesNotExist_ReturnsUserNotFound()
{
// Arrange
var mockUserRepository = new Mock<IUserRepository>();
mockUserRepository.Setup(repo => repo.GetUserById(2))
.Returns((User)null);
var userService = new UserService(mockUserRepository.Object);
// Act
var result = userService.GetUserNameById(2);
// Assert
Assert.Equal("User not found", result);
}
}
var mockUserRepository = new Mock<IUserRepository>();
Moq ব্যবহার করে IUserRepository
এর একটি মক ইন্সট্যান্স তৈরি করা হয়েছে।
mockUserRepository.Setup(repo => repo.GetUserById(1))
.Returns(new User { Id = 1, Name = "John Doe" });
GetUserById(1)
মেথডটি কল হলে এটি একটি নির্দিষ্ট মান User
ফেরত দেবে।
var userService = new UserService(mockUserRepository.Object);
মক করা অবজেক্ট userService
এর কনস্ট্রাক্টরে পাস করা হয়েছে।
Assert.Equal("John Doe", result);
পরীক্ষা করা হচ্ছে যে GetUserNameById(1)
মেথডটি সঠিক ফলাফল ফেরত দিচ্ছে কিনা।
Moq দিয়ে নিশ্চিত করা যায় যে একটি নির্দিষ্ট মেথড নির্দিষ্ট সংখ্যক বার কল করা হয়েছে কিনা।
mockUserRepository.Verify(repo => repo.GetUserById(1), Times.Once);
এটি নিশ্চিত করবে যে GetUserById(1)
শুধুমাত্র একবার কল হয়েছে।
মক মেথড একটি নির্দিষ্ট Exception ছুঁড়তে পারে:
mockUserRepository.Setup(repo => repo.AddUser(It.IsAny<User>()))
.Throws(new Exception("Database error"));
Moq Framework ব্যবহার করে ASP.NET Core অ্যাপ্লিকেশনের Unit Testing সহজ এবং কার্যকর হয়। এটি ডিপেনডেন্ট ক্লাস বা ইন্টারফেসের মক তৈরি করে টেস্টিং-এর সময় এক্সটার্নাল ডিপেনডেন্সি দূর করে। এর ফলে কোডের গুণগত মান বৃদ্ধি পায় এবং টেস্টিং দ্রুত এবং নির্ভরযোগ্য হয়। Moq Framework Unit Testing-এর জন্য একটি অত্যন্ত কার্যকর টুল।
Integration Testing হলো সফটওয়্যার টেস্টিংয়ের একটি ধাপ, যেখানে একাধিক উপাদান বা মডিউলকে একত্রে পরীক্ষা করা হয়। উদ্দেশ্য হলো, নিশ্চিত হওয়া যে, বিভিন্ন মডিউল বা সিস্টেমের উপাদানগুলো একে অপরের সাথে সঠিকভাবে কাজ করছে। এই ধরনের টেস্টিংয়ের মাধ্যমে সিস্টেমের ইন্টিগ্রেশন পয়েন্টগুলি এবং ডেটা প্রবাহের ভুলগুলো শনাক্ত করা হয়।
ASP.NET Core-এ Integration Testing করতে হলে কিছু টুল এবং প্রক্রিয়া অনুসরণ করতে হবে। আপনি xUnit
, NUnit
, বা MSTest
এর মতো টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করতে পারেন।
ধরা যাক, আমাদের একটি API আছে যা ডাটাবেস থেকে ব্যবহারকারীর তথ্য ফেরত দেয়। এই API টেস্ট করতে আমরা নিম্নলিখিত টেস্ট লিখতে পারি।
dotnet new xunit -n MyApp.IntegrationTests
Test Project ফোল্ডারে TestServer এবং WebApplicationFactory ব্যবহার করে অ্যাপ্লিকেশনকে ইনিশিয়ালাইজ করুন।
public class UserApiIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly HttpClient _client;
private readonly WebApplicationFactory<Startup> _factory;
public UserApiIntegrationTests(WebApplicationFactory<Startup> factory)
{
_factory = factory;
_client = factory.CreateClient();
}
[Fact]
public async Task GetUser_ReturnsSuccessStatusCode()
{
var response = await _client.GetAsync("/api/users/1");
response.EnsureSuccessStatusCode(); // Verifies 2xx status code
}
}
এই কোডটি WebApplicationFactory
ব্যবহার করে অ্যাপের API রুটে রিকোয়েস্ট পাঠাচ্ছে এবং প্রাপ্ত রেসপন্স যাচাই করছে।
Test Driven Development (TDD) হলো একটি সফটওয়্যার ডেভেলপমেন্ট প্রক্রিয়া, যেখানে প্রথমে টেস্ট লেখা হয় এবং তারপর সেই টেস্টটি পাস করার মতো কোড লেখা হয়। এই প্রক্রিয়াটি কোডের গুণগত মান উন্নত করে এবং সফটওয়্যার ডেভেলপমেন্টে আরও স্থিতিশীলতা আনে।
ধরা যাক, আমাদের একটি ফাংশন তৈরি করতে হবে যা দুটি সংখ্যা যোগ করবে। প্রথমে TDD পদ্ধতিতে টেস্ট লিখি।
public class MathTests
{
[Fact]
public void Add_ReturnsCorrectSum()
{
// Arrange
var math = new MathOperations();
// Act
var result = math.Add(1, 2);
// Assert
Assert.Equal(3, result);
}
}
এখানে আমরা Add ফাংশনটির জন্য একটি টেস্ট লিখেছি, যেখানে 1 এবং 2 যোগ করার পর প্রত্যাশিত ফলাফল 3 হওয়া উচিত।
এখন কোড লিখি যাতে টেস্টটি পাস হয়।
public class MathOperations
{
public int Add(int a, int b)
{
return a + b;
}
}
টেস্টটি চালালে, এটি পাস করবে এবং Add ফাংশনটি সঠিকভাবে কাজ করবে।
এখন কোডটি পরিষ্কার বা আরও উন্নত করা যায়, যদি প্রয়োজন হয়।
Integration Testing এবং Test Driven Development (TDD) হল দুটি গুরুত্বপূর্ণ সফটওয়্যার ডেভেলপমেন্ট কৌশল। Integration Testing ব্যবহারকারীর সিস্টেমের ইন্টিগ্রেশন পয়েন্টগুলো পরীক্ষা করতে সহায়ক, যেখানে TDD আপনার কোডের গুণগত মান এবং স্থায়িত্ব নিশ্চিত করতে সহায়ক। TDD কোড লেখার আগে টেস্ট তৈরি করে এবং সেই টেস্ট পাস করার জন্য কোড লেখার প্রক্রিয়া অনুসরণ করে, যা সিস্টেমের প্রতিটি ইউনিট ও উপাদানের সঠিক কার্যকারিতা নিশ্চিত করে। Integration Testing-এ একাধিক সিস্টেম বা মডিউলের একসাথে কাজ করা যাচাই করা হয়, যা সফটওয়্যারের বড় স্তরের টেস্টিং প্রক্রিয়া।
ASP.NET Core অ্যাপ্লিকেশনের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট খুবই গুরুত্বপূর্ণ। এগুলি আপনার অ্যাপ্লিকেশনের কোডের গুণগত মান নিশ্চিত করতে এবং নতুন ফিচার যোগ করার সময় পূর্ববর্তী ফিচারগুলির সঠিকতা বজায় রাখতে সাহায্য করে। এখানে আমরা আলোচনা করব কিভাবে ASP.NET Core MVC এবং Web API টেস্ট করা যায়।
ASP.NET Core MVC অ্যাপ্লিকেশনের জন্য টেস্ট তৈরি করতে হলে, প্রথমে আপনাকে Unit Test এবং Integration Test কনসেপ্টের মধ্যে পার্থক্য বুঝতে হবে। MVC টেস্টে সাধারণত Controller এর একশন মেথডগুলোর জন্য টেস্ট করা হয়।
Unit Testing তে, আমরা নির্দিষ্ট একটি ইউনিট (যেমন Controller, Service) টেস্ট করি। আমরা xUnit বা NUnit টেস্ট ফ্রেমওয়ার্ক ব্যবহার করতে পারি। এখানে xUnit এর উদাহরণ দেওয়া হলো।
xUnit ইনস্টল করা:
dotnet add package xunit
dotnet add package Microsoft.AspNetCore.Mvc.Testing
dotnet add package Moq
Controller Test করা:
উদাহরণস্বরূপ, যদি আপনি HomeController
টেস্ট করতে চান:
public class HomeControllerTests
{
private readonly HomeController _controller;
private readonly Mock<IProductService> _mockService;
public HomeControllerTests()
{
_mockService = new Mock<IProductService>();
_controller = new HomeController(_mockService.Object);
}
[Fact]
public async Task Index_ReturnsAViewResult_WithAListOfProducts()
{
// Arrange
_mockService.Setup(service => service.GetProducts())
.ReturnsAsync(new List<Product> { new Product { Id = 1, Name = "Product 1" } });
// Act
var result = await _controller.Index();
// Assert
var viewResult = Assert.IsType<ViewResult>(result);
var model = Assert.IsAssignableFrom<List<Product>>(viewResult.ViewData.Model);
Assert.Single(model);
}
}
এখানে, Moq ব্যবহার করে IProductService
এর মক তৈরি করা হয়েছে এবং HomeController
এর Index
একশন টেস্ট করা হয়েছে।
Integration Test-এ, আমরা পুরো অ্যাপ্লিকেশন বা কন্ট্রোলার ইন্টিগ্রেশন টেস্ট করি। ASP.NET Core-এ WebApplicationFactory ব্যবহার করে Integration Test করা হয়।
Microsoft.AspNetCore.Mvc.Testing
প্যাকেজ ইনস্টল করতে হবে।Integration Test উদাহরণ:
public class HomeControllerIntegrationTests : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public HomeControllerIntegrationTests(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
[Fact]
public async Task Index_ReturnsSuccessStatusCode()
{
// Arrange
var client = _factory.CreateClient();
// Act
var response = await client.GetAsync("/Home/Index");
// Assert
response.EnsureSuccessStatusCode();
}
}
এখানে, WebApplicationFactory
ব্যবহার করে আমরা পুরো অ্যাপ্লিকেশনকে মক করে HomeController
এর Index
একশন টেস্ট করেছি।
ASP.NET Core Web API এর জন্য Integration Test তৈরি করা হয়, যাতে API এর রেসপন্স, স্ট্যাটাস কোড, এবং কনটেন্ট টেস্ট করা যায়। আমরা xUnit
, Microsoft.AspNetCore.Mvc.Testing
, এবং HttpClient ব্যবহার করব।
HttpClient
ব্যবহার করে API রিকোয়েস্ট করা হয় এবং রেসপন্স চেক করা হয়।API Controller Test উদাহরণ:
public class ProductsControllerTests : IClassFixture<WebApplicationFactory<Startup>>
{
private readonly WebApplicationFactory<Startup> _factory;
public ProductsControllerTests(WebApplicationFactory<Startup> factory)
{
_factory = factory;
}
[Fact]
public async Task GetProducts_ReturnsOkResponse()
{
// Arrange
var client = _factory.CreateClient();
// Act
var response = await client.GetAsync("/api/products");
// Assert
response.EnsureSuccessStatusCode();
var products = await response.Content.ReadAsStringAsync();
Assert.Contains("Product", products);
}
}
এখানে, আমরা WebApplicationFactory
ব্যবহার করে API কল করলাম এবং GetAsync
মেথড ব্যবহার করে Products
API টেস্ট করলাম।
অনেক সময়, Web API এর Controller গুলি এক্সটার্নাল সার্ভিস বা ডেটাবেসের সাথে যোগাযোগ করতে পারে। এই ধরনের ডিপেনডেন্সি মক করা গুরুত্বপূর্ণ। নিচে Moq ব্যবহার করে মক করা উদাহরণ দেখানো হলো।
public class ProductsControllerTests
{
private readonly ProductsController _controller;
private readonly Mock<IProductService> _mockService;
public ProductsControllerTests()
{
_mockService = new Mock<IProductService>();
_controller = new ProductsController(_mockService.Object);
}
[Fact]
public async Task GetProduct_ReturnsOkResult_WithProduct()
{
// Arrange
_mockService.Setup(service => service.GetProduct(1))
.ReturnsAsync(new Product { Id = 1, Name = "Product 1" });
// Act
var result = await _controller.GetProduct(1);
// Assert
var actionResult = Assert.IsType<ActionResult<Product>>(result);
var okResult = Assert.IsType<OkObjectResult>(actionResult.Result);
var product = Assert.IsType<Product>(okResult.Value);
Assert.Equal(1, product.Id);
}
}
এখানে, IProductService
এর মক তৈরি করা হয়েছে এবং ProductsController
এর GetProduct
একশন টেস্ট করা হয়েছে।
ASP.NET Core MVC এবং Web API টেস্ট করার জন্য, আপনাকে Unit Test এবং Integration Test এর মধ্যে পার্থক্য বুঝতে হবে। xUnit এবং Moq এর মতো টেস্ট ফ্রেমওয়ার্ক ব্যবহার করে আপনি Controller এর একশন টেস্ট করতে পারেন এবং WebApplicationFactory ব্যবহার করে আপনি পুরো API বা MVC অ্যাপ্লিকেশন ইন্টিগ্রেশন টেস্ট করতে পারেন। টেস্ট করা আপনাকে অ্যাপ্লিকেশন উন্নয়নে সহায়তা করবে এবং কোডের সঠিকতা নিশ্চিত করবে।
common.read_more